                                   Anleitung
                       RISC OS Tintenstrahldrucker Dumper

                         Erstellt 22.09.2004 T. Milius
                         Gendert 13.04.2005 T. Milius

     ----------------------------------------------------------------------

                                     Inhalt

    1. berblick
    2. Anmerkungen
    3. Installation
         1. Untersttze Drucker
         2. Kalibrierung
    4. Motivation
    5. Copyright
    6. Kontakt
    7. Ntzliche Verweise, um ein eigenes PDF zu erstellen
    8. Historie
         1. Version 1.00
         2. Version 1.01
         3. Version 2.07
    9. Future
   10. Technische Details
         1. Der Kellerstackrechner in Druckersteuersequenzen
              1. Kommandos
              2. Variablen
              3. Programmbeispiel
         2. Die druckerspezifische Kalibrierungsdatei
              1. Der "Dummy for page size" Modus
         3. Externe Kalibrierungsdateien
         4. Die Ditherinfo Datei

                                 1. berblick

   Das Programm besteht aus einem Printer Dumper und einem
   Kalibrierungsprogramm. Der Prinetr Dumper wurde so entwickelt, dass er
   fr diverse Tintenstrahldrucker eingesetzt werden kann, und untersttzt
   bis zu 10 Tintenpatronen.

   Der Dumper erlaubt es direkt oder mit angenherten Farben in eine
   Spritedatei zu drucken. Die Seiten werden dabei als eigenstndige Sprites
   innerhalb der Datei gespeichert.

   Das Programm ist Freeware. Fr nhere Information hierzu im bitte
   Copyright-Absatz nachlesen.

                                 2. Anmerkungen

   Der Dumper wurde von mir nur mit den Druckern EPSON Stylus Color 580 und
   EPSON Stylus Photo 700 getested. Man den Dumper aber an andere Drucker
   anpassen. Z.B. hat Martin Hodgson ein PDF den EPSON Stylus Photo 870
   entwickelt.

   Gebrauch und Modifikation erfolgt ausschliesslich auf eigene Gefahr. Wenn
   Tinte in den Raum, z.B. auf die Tapeten, spritzt, Aliens ihr Haus
   angreifen, whrend oder kurz nachdem Sie den Dumper nutzen oder genutzt
   haben, so bernehme ich keine Verantwortung dafr.

   Bitte beachten Sie, dass der Dumper nur zum Ausdruck verwendet werden
   kann. Er untersttzt keine weitergehenden Eigenschaften wie Anzeige der
   verbleibenden Tinte, Fehlerbehandlung oder Wechseln der Tintenptronen. In
   diesem Zusammenhang muss ich davor warnen, sich einen EPSON Stylus Color
   580 zuzulegen, wenn man nur eine RISC OS Maschine besitzt und nicht
   ebenfalls einen PC. Ein Wechsel der Tintenpatronen nutzt undokumentierte
   Steuersequenzen und so kann man die Tintenpatronen nicht unter RISC OS
   oder LINUX wechseln, sondenr nur mit der original PC Software.

   Martin Hodgson war so nett, PDFs fr andere Drucker als den 580 zu
   schreiben, und fungierte als Betatester fr meinen Dumper. Bitte setzen
   Sie sich mit ihm in Verbindung, wenn Sie meinen Dumper mit anderen
   EPSON-Druckern nutzen mchten.

   Mein Dank gilt Robin Watts und Justin Fletcher fr cmunge und Daniel
   Ellis. Mit deren Hilfe fand ich heraus wie der Assembler/C Adapter zum
   26-Bit RISC OS aufgebaut werden musste.

                                3. Installation

   Kopieren Sie einfach die "!PDPEICal" Applikation irgenwo auf ihre
   Festplatte. Sie lsst sich auch direkt starten. Die Applikation ist zum
   Betrieb des Dumpers nicht zwingend notwendig, sondern nur zur Installation
   und Kalibrierung.

   Starten Sie "!PDPEICal". Wenn Sie eine ltere inkompatible Version von
   ;PDumperEI" installiert haben (wie z.B. 1.x) wird diese Version
   automatisch entfernt und in einem speziellen temporren Verzeichnis
   gespeichert, dass automatisch angezeigt wird. nach dem Start wird die
   Applikation auf der rechten Seite der Programmleiste angezeigt,
   gleichzeitig ffnet sich ein Verzeichnis, dass die verfgbaren PDFs
   anzeigt. Zu diesem Zeitpunkt wurde der Dumper bereits installiert. Nun
   muss noch die zum Drucker gehrende Kalibrierungsdatei installiert
   werden. Um dies zu tun, laden sie das entspechende PDF und whlen es als
   aktiver Drucker. Bitte stellen sie sicher, dass es sich beim ausgewhlten
   Drucker, um einen handelt, der von "PDumperEI" gesteuert wird.

   Dann klicken Sie auf "!PDPEICal" auf der Programmleiste. Wenn es zum dem
   Drucker eine entsprechende Kalibrierungsdatei gibt, so wird diese nun
   installiert, was per Nachricht angezeigt wird. Wenn eine entsprechende
   Kalibrierngsdatei bereits instllaiert wurde, oder wenn keine Datei
   gefunden wurde, wird das Kalibrierungsfenster zusammen mit einem
   Verzeichnis, der verfgbaren Kalibrierungen angezeigt. Innerhalb des
   Kalibrierungsfensters gibt es ein Feld, wo man die Kalibrierungsdatei
   durch eine andere ersetzen kann. Dazu kann man eine Kalibrierungsdatei auf
   das Fenster ziehen. Sobald sich das Feld ndert, wird ein Knopf
   aktiviert, den man bettigen muss, um die neue Datei als
   Kalibrierungsdatei fr den Drucker zu verwenden. Wenn Sie nur die
   Kalibrierungsdatei als Ganzes ndern oder den Kalibrierungsprozess
   abbrechen wollen, kann man das Fenster schliessen, ansonsten startet man
   den Kalibrierungsprozess. Es ist nicht zwangslufig notwendig, das Feld
   mit der Kalibrierungsdatei zu fllen. Wenn ist leer ist, kann man den
   Kalibrierungsprozess von Anfang an durchfhren.

3.1. Untersttze Drucker

   Fr die folgenden Drucker gibt es z.Z. PDFs zur Benutzung mit PDumperEI.

   +------------------------------------------------------------------------+
   |Hersteller| Typ  |        Beschreibung        | Bezugsquelle |Entwicklet|
   |          |      |                            |              |   von    |
   |----------+------+----------------------------+--------------+----------|
   |          |      |Alle Sprites benutzen       |              |          |
   |          |      |180/180 dpi als Auflsung.  |              |          |
   |          |      |Folgende Grafikmodi stehen  |              |          |
   |          |      |zur Verfgung:              |              |          |
   |          |      |                            |              |          |
   |          |      |  * Gedithert Schwarz/Weiss |              |          |
   |          |      |    (1 Bit)                 |              |          |
   |          |      |  * Gedithert farbig (4 Bit)|              |          |
   |          |      |  * Gedithert farbig (8 Bit)|              |          |
   |          |      |  * Gedithert Graustufen (2 |              |          |
   |          |      |    Bit)                    |              |          |
   |          |      |  * Gedithert Graustufen (4 |Wird mit dem  |Thomas    |
   |RISC OS   |Sprite|    Bit)                    |Dumper        |Milius    |
   |          |      |  * Gedithert Graustufen (8 |ausgeliefert  |          |
   |          |      |    Bit)                    |              |          |
   |          |      |  * Direkt (32 Bit)         |              |          |
   |          |      |                            |              |          |
   |          |      |Genutzte Kalibrierungen:    |              |          |
   |          |      |                            |              |          |
   |          |      |  * 0 - Schwarz/Weiss       |              |          |
   |          |      |  * 1 - 4 Graustufen        |              |          |
   |          |      |  * 2 - 16 Graustufen       |              |          |
   |          |      |  * 3 - 256 Graustufen      |              |          |
   |          |      |  * 4 - 16 Farben           |              |          |
   |          |      |  * 5 - 256 Farben          |              |          |
   |----------+------+----------------------------+--------------+----------|
   |          |Stylus|                            |Stylus Color  |          |
   |EPSON     |Color |                            |580 Treiber   |          |
   |          |480   |                            |benutzen      |          |
   |----------+------+----------------------------+--------------+----------|
   |          |      |Folgende Grafikmodi stehen  |              |          |
   |          |      |zur Verfgung:              |              |          |
   |          |      |                            |              |          |
   |          |      |  * 120/360 dpi 4 Farbmodus |              |          |
   |          |      |    (15 Dsen)              |              |          |
   |          |      |  * 360/360 dpi 4 Farbmodus |              |          |
   |          |      |    (15 Dsen)              |              |          |
   |          |      |  * 120/360 dpi             |              |          |
   |          |      |    GraustufenModus (48     |              |          |
   |          |      |    Dsen)                  |              |          |
   |          |      |  * 360/360 dpi             |              |          |
   |          |      |    GraustufenModus (48     |              |          |
   |          |      |    Dsen)                  |              |          |
   |          |      |  * 360/360 dpi geditherte  |              |          |
   |          |      |    farbige Spriteausgabe zu|              |          |
   |          |      |    Vorschauzwecken         |              |          |
   |          |      |  * Spezialmodus zur        |              |          |
   |          |      |    Bestimmnug der          |              |          |
   |          |      |    Seitengrsse            |              |          |
   |          |      |                            |              |          |
   |          |Stylus|Genutzte Kalibrierungen:    |Wird mit dem  |Thomas    |
   |EPSON     |Color |                            |Dumper        |Milius    |
   |          |580   |  * 0 - Farbe normales      |ausgeliefert  |          |
   |          |      |    Papier                  |              |          |
   |          |      |  * 1 - Farbe Photopapier   |              |          |
   |          |      |  * 2 - Graustufen normales |              |          |
   |          |      |    Papier                  |              |          |
   |          |      |  * 3 - Graustufen          |              |          |
   |          |      |    Photopapier             |              |          |
   |          |      |                            |              |          |
   |          |      |Folgende Textmodi stehen zur|              |          |
   |          |      |Verfgung:                  |              |          |
   |          |      |                            |              |          |
   |          |      |  * No highlights           |              |          |
   |          |      |                            |              |          |
   |          |      |Keine Zeichenbersetzung    |              |          |
   |          |      |implementiert. Der Texmodus |              |          |
   |          |      |des Stylus Colour 580 ist   |              |          |
   |          |      |drftig.                    |              |          |
   |          |      |Farben/Kursivschrift/       |              |          |
   |          |      |Fettschrift/unterschiedliche|              |          |
   |          |      |Schriftgrssen sind nicht   |              |          |
   |          |      |verfgbar.                  |              |          |
   |----------+------+----------------------------+--------------+----------|
   |          |      |                            |Stylus Color  |          |
   |EPSON     |C20   |                            |580 Treiber   |          |
   |          |      |                            |benutzen      |          |
   |----------+------+----------------------------+--------------+----------|
   |          |      |                            |Stylus Color  |          |
   |EPSON     |C40   |                            |580 Treiber   |          |
   |          |      |                            |benutzen      |          |
   |----------+------+----------------------------+--------------+----------|
   |          |Stylus|                            |Stylus Photo  |          |
   |EPSON     |Photo |                            |700 Treiber   |          |
   |          |      |                            |benutzen      |          |
   |----------+------+----------------------------+--------------+----------|
   |          |      |                            |Stylus Photo  |          |
   |          |      |                            |700 Treiber   |          |
   |          |Stylus|                            |benutzen.     |          |
   |EPSON     |Photo |                            |Grosse        |          |
   |          |EX    |                            |Seitengrssen |          |
   |          |      |                            |mssen        |          |
   |          |      |                            |ergnzt       |          |
   |          |      |                            |werden.       |          |
   |----------+------+----------------------------+--------------+----------|
   |          |      |Folgende Grafikmodi stehen  |              |          |
   |          |      |zur Verfgung:              |              |          |
   |          |      |                            |              |          |
   |          |      |  * 360/360 dpi 6 Farbmodus |              |          |
   |          |      |    (24 Dsen)              |              |          |
   |          |      |  * 360/360 dpi             |              |          |
   |          |      |    Graustufenmodus (24     |              |          |
   |          |      |    Dsen)                  |              |          |
   |          |      |  * 360/360 dpi geditherte  |              |          |
   |          |      |    farbige Spriteausgabe zu|              |          |
   |          |      |    Vorschauzwecken         |              |          |
   |          |      |  * Spezialmodus zur        |              |          |
   |          |      |    Bestimmnug der          |              |          |
   |          |      |    Seitengrsse            |              |          |
   |          |      |                            |              |          |
   |          |Stylus|Genutzte Kalibrierungen:    |Wird mit dem  |          |
   |EPSON     |Photo |                            |Dumper        |Thomas    |
   |          |700   |  * 0 - Farbe normales      |ausgeliefert  |Milius    |
   |          |      |    Papier                  |              |          |
   |          |      |  * 1 - Farbe Photopapier   |              |          |
   |          |      |  * 2 - Graustufen normales |              |          |
   |          |      |    Papier                  |              |          |
   |          |      |  * 3 - Graustufen          |              |          |
   |          |      |    Photopapier             |              |          |
   |          |      |                            |              |          |
   |          |      |Folgende Textmodi stehen zur|              |          |
   |          |      |Verfgung:                  |              |          |
   |          |      |                            |              |          |
   |          |      |  * No highlights           |              |          |
   |          |      |  * Draft highlights        |              |          |
   |          |      |  * NLQ highlights          |              |          |
   |          |      |                            |              |          |
   |          |      |Zeichenbersetzung          |              |          |
   |          |      |implementiert.              |              |          |
   |----------+------+----------------------------+--------------+----------|
   |          |      |  * 15 Dsen 6 Farbmodus.   |              |          |
   |          |      |  * 15 Dsen                |              |          |
   |          |Stylus|    Graustufenmodus.        |Wird mit dem  |Martin    |
   |EPSON     |Photo |  * 360/360 dpi geditherte  |Dumper        |Hodgson   |
   |          |870   |    farbige Spriteausgabe zu|ausgeliefert  |          |
   |          |      |    Vorschauzwecken         |              |          |
   |          |      |  * ???                     |              |          |
   +------------------------------------------------------------------------+

                                    Hinweise

   Nur Treiber, die auf dem entsprechenden Drucker getestet wurden, sind als
   PDF/Kaliebrungsdatei unter dem Namen des Druckers verfgbar. Fr alle
   anderen Drucker, die mit einem vorhandenen Treiber betrieben werden
   knnen mssten, aber nicht getestet wurden, gibt es einen Verweis auf
   den Treiber.

   Probieren Sie einfach einen Treiber fr ihren Drucker aus. Wenn es
   klappt, sagen Sie mir bitte Bescheid, damit ich die Liste entsprechend
   ergnzen kann.

                                  Workarounds

   Die technische Entwicklung schreitet "voran". So werden Dinge, die in der
   guten alten Zeit einfach waren, pltzlich kompliziert. Ein gutes Beispiel
   hierfr ist der Ausdruck von Textzeichen. In der "guten" alten Zeit war
   der Ausdruck von Textzeichen in einer Grsse und in einem Zeichensatz die
   einzige Druckmglichkeit. Heute hingegen gibt es bereits Drucker die nur
   noch den Ausdruck von Grafik erlauben.

   Wenn Sie stolzer Eigentmer eines solchen Druckers sind und Text drucken
   mssen, knnen Sie sich mit ein paar Werkzeugen behelfen. Man kann
   Textdateien temporr in PDF Dateien (ACHTUNG: Das Adobe Grafikformat ist
   gemeint) umwandeln und diese kann man dann im Grafikmodus drucken. Die
   Konvertierung erfolgt schnell und auch der Ausdruck liefert befriedigende
   Ergebnisse, da nur Schwarz und Weiss genutzt werden.

3.2. Kalibrierung

   Wenn Sie ihren Drucker kalibrieren wollen, mssen Sie festlegen welche
   Grundfarben der Drucker zur Verfgung stellt. Jede dieser Grundfarben
   wird von einer Farbpatrone in Ihrem Drucker bereitgestelt. Die Intensitt
   einer Grundfarbe wird, soweit mglich, vom Dumper in bereinstimmung mit
   dem zu druckenden Inhalt des Dokuments angepasst und an den Drucker
   gesendet. Die Anzahl der mglichen Intensitten ergibt sich aus den Bits
   pro Pixel, die in einem Feld innerhalb des Kalibrierungsfensters
   festgelegt werden knnen. Im Moment ist der Wert auf 2 Bits fr
   EPSON-Drucker eingestelt, er kann aber auf 1 oder 4 gendert werden. Der
   Dumper selbst kann intern mit Werten im Bereich von 1 bis 8 umgehen. Ein
   weiteres Feld legt die Zahl der Pad-Bits fest. Typischerweise ist der Wert
   0. Wird ein anderer Wert festgelegt, so wird der absolute Betrag von der
   Anzahl der Bits per Pixel abgezogen. D.h. das dieser Wert die Anzahl der
   Intensitten verringert. Man kann dieses Feld fr Drucker verwenden, die
   z.B. 8 Farben haben, dafr aber 4 Bits zur Darstellung des Wertes
   bentigen. In einem solchen Fall ist 1 Bit des Farbwertes immer 0. Whlt
   man bei den Pad-bits einen positiven Wert, so werden die hchstwertigen
   Bits mit 0 aufgefllt, bei einem negativen Wert werden die niederwertigen
   Bits mit 0 aufgefllt, was zu einem nach links verschobenem Wert fhrt.
   Ein weiteres Feld bestimmt, wie die Intensitten der Grundfarben in der
   Vorlage erzeugt werden. Man kann zwischen logarithmisch und linear
   whlen. Unabhngig von der Intensitt bleibt der Farbton einer
   Grundfarbe immer bestehen. Die Grundfarebn knnen gemischt werden und so
   erhlt man eine feste Anzahl von Farben, die gedruckt werden knnen.
   Hierauf basiert das ganze Ditherkonzept des Dumpers. Zu einer vorgegebenen
   Frabe versucht er, die beste Annherung als Mix aus den wirklich
   verfgbaren Farben zu ermitteln. Welche Farben wirklich verfgbar sind,
   mssen Sie dem Dumper in den nchsten Schritten mitteilen.

   Whlen Sie die Grundfarben, die den Farbpatronen des Drucker entsprechen.
   Danach starten Sie den Kalibrierunsgprozess. Unmittelbar danach erscheint
   eine Draw-Datei, die jede Menge quadratischer Kstchen darstellt. Fr
   jede festgelegte Farbpatrone gibt es eine Reihe mit Kstchen. Die
   Kstchen innerhalb einer Reihe unetrschiedliche Intensitten.

   Intern hat das Kalibrierungsprogram die Kalibrierungsdatei, so
   abgendert, dass jedes Kstchen exakt durch Tinte genau einer
   Farbkartusche ungedithert in der durch die Druckintensittsbits
   festgelegten Intensitt gedruckt wird. Drucken Sie die Draw-Datei mit den
   Kstchen nun auf ihrem Drucker aus.

   Wenn man sich den Ausdruck nun anschaut, wird man typischerweise
   festestellen, dass es mehr oder weniger grosse Abweichungen zwischen den
   gedruckten Farben und den Farben, so wie sie auf dem Schirm in der
   Draw-Datei dargestellt werden, gibt. Um dies zu korrigieren wird parallel
   mit der Draw-Datei eine Farbauswahlbox geffnet, die die Farbe des
   Kstchens links oben auf dem Ausdruck darstellt. Man kann die Farbe nun
   abndern. Nachdem man OK gewhlt hat (ACHTUNG: Nicht auf OK mit der Maus
   klicken. Auf meinem Iyonix werden die eingegebenen Werte dann nicht
   korrekt bernommen.), wird die rechts von der eben dargestellten Farbe
   stehende dargestellt. Nachdem alle Intensitten fr eine Farbpatrone
   dargestellt wurden, wird die erste Intensitt der nchsten Farbpatrone
   dargestellt (d.h. der Anfang der nchsten Kchstenzeile) usw. bis alle
   Farben auf dem Ausdruck kalibriert wurden. man kann den
   Kalibrierungsprozess durch Bettigen des Abbruch-Knopfes jederzeit
   abbrechen. In diesem Fall, wird die zuvor gltige kalibrierung wieder
   hergestellt.

   Nun kann man versuchen, richtige Ausdrucke zu erstellen. Es ist allerdings
   wahrscheinlich, dass man noch nachkalibrieren muss. Hierzu einige
   Hinweise:

     * Bei Grautnen darf man die Helligkeit, ndern aber keinesfalls den
       Farbton. Alle RGB/CMY Werte mssen gleich sein!

     * Als erstes sollte man versuchen die richtige Helligkeit zu ermitteln.
       Danach kann man den Farbton entsprechend verschieben.

     * Prinzipiell kann man Rot anstelle von Grn verwenden usw..
       Entsprechend seltsam wird am Ende das Ergebnis aussehen.

     * Die Intensitten der Grundfarben logarithmisch zu erzeugen macht bei
       ab 8 oder 16 Intensitten keinen Sinn. Man erhlt extrem schnell
       reines Weiss.

     * Es besteht das Problem, die beste Intensitt einer Grundfarbe zu
       ermitteln, wenn der Drucker mehr als eine Farbpatrone fr diese Farbe
       verwendet (das zyanste Zyan). Das Kalibrierungsprogramm zieht alle
       subtraktiven Werte zusammen. Wenn dies dazu fhrt, dass eine
       Farbkombination ausserhalb des Normfarbraums zu liegen kommt, so wird
       wie folgt verfahren. Zwischen der Farbe und der Papierfarbe wird eine
       Linie gebildet. Es wird die Stelle ermittelt, wo diese Linie die Seite
       des Farbraumwrfels schneidet. Die entsprechende Farbe des
       Farbraumwrfels ersetzt die ursprngliche Farbe. Sie wird in der
       Praxis durch einen Mix aus der ursprnglichen Farbe und der
       Papierfarbe angenhert. In der Kalibrierungsmaske gibt es das Feld
       "Intensitt" wo man die Intensitt aller Farben durch Angabe eines
       Wertes grsser als 100 Prozent erhhen kann. Dies fhrt zu einer
       reduzierten Anwendung der Farbe, was hilfreich ist, wenn zuviel Tinte
       aufs Papier gedruckt wird (z.B. bei Interlaces).

   Das Kalibrierungsdprogramm ist nur eine Mglichkeit, um den Drucker zu
   kalibrieren. Es kommt auf die Kalibrierungsdatei selbst an (ASCII-Format).
   Die Datei kann manuell editiert oder von einem selbstgeschrieben Programm
   erzeugt werden. Auf diese Weise kann man z.B. jede druckbare Farbe
   kalibrieren und nicht nur die Grundfarben. Eine Farbpatrone kann dann 2
   Intensitten haben und eine andere 16 usw.. Als Problem verbleibt jedoch
   die Berechnung der Wrfel rund um die Farben. Zu diesem Zweck bietet das
   Kalibrierungsprogramm die Mglichkeit eine externe Kalibrierunsgdatei,
   die nur Farb-, Farbgruppen- und Druckermusterinformationen enthlt mit
   den vom Kalibrierungsprogramm erzeugten Daten zu mischen. Der Name der
   Kalibrierungsdatei muss im Feld "..." eingegeben werden. Weitere
   Informationen finden Sie im Abschnitt "Externe Kalibrierungsdateien".

   Man kann bis zu 255 Kalibrierungen fr einen Drucker definieren. Dies
   lsst sich zur modus- oder papierabhngigen Feinkalibrierung nutzen.
   Interlace-Modi drucken mehr Tinte aufs Papier als Non-Interlace-Modi.
   Farben sehen auf Normalpapier anders aus als auf Fotopapier. Unter
   Ausnutzung der unterscheidlichen Kalibrierungen kann man die Ausgabe
   entsprechend abstimmen. Die Kalibriering kann fr jede Seite wechseln,
   wenn man sich ein entsprechendes PDF schreibt.

   Die Kalibrierungen knnen vllig unterschiedliche
   Farbpatronenkombinationen nutzen. Dies kann man dazu nutzen, um Modi ohne
   Schwarzpatrone zu definieren, oder um verschiedene Patronen zu simulieren,
   wie beim EPSON C80 im Graustufen modus.

   In der Kalibrierungsmaske befindet sich ein Feld "...", wo man eine der
   existierenden Kalibrierungen auswhlen kann, um sie zu modifizieren. Man
   kann auch eine neue Nummer vergeben. Der nchste Kalibrierungsprozess
   bezioeht sich auf die in diesem Feld eingetragene Nummer. Man kann auch
   eine Kalibrirung durch Bettigen des "..." Knopfes lschen.

                                 4. Motivation

   Ich habe die Entwicklung des Druckertreibers begonnen, whrend ich meinen
   eigenen USB-Stack entwickelte. Ich kaufte mir im Herbst 2001 einen EPSON
   580 Stylus Color Drucker und musste festestellen, dass keins der mit RISC
   OS (<=4.02) gelieferten Printer Defintion Files (PDF) mit ihm zurecht kam.

   Ich beschloss notgedrungen, die Situation zu ndern. Ich fand heraus,
   dass nicht damit getan war nur ein neues PDF zu schreiben. Der mit RISCOS
   geleiferte Treiber untersttzte nur einen alten Grafikmodus.
   Unglcklicherweise setzte dieser Modus voraus, dass die Anzahl der
   schwarzen Dsen und die der farbigen Dsen gleich war. Der 580 hat zwei
   Druckkpfe mit 48 Dsen fr Schwarz und 3*15 Dsen fr Zyan, Mangenta
   und Gelb. So war es nicht mglich eine Kombination zu finden, die unter
   RISC OS untersttzt wurde. Der Drucker bietet einen neuen Grafikmodus,
   der das Problem umgeht. Dieser Modus interpoliert die angegeben Punkte
   (15) auf die zur Verfgung stehenden Dsen.

   So habe ich denn einen neuen Printer Dumper entwickelt, um das Problem zu
   lsen. Whrend der Entwicklung traten einen Menge Probleme auf. Eins
   davon war die korrekte Justierung der Farben. Ein weiteres Problem war die
   Erzeugung von guten Dither-Mustern. Insgesamt ergab sich daraus die
   Aufgabenstellung Farbannhrungen im Ausdruck zu erzeugen, die eine
   gewisse hnlichkeit mit denen Farben auf dem Schirm aufwiesen. Der erste
   Ansatz erwies sich als nicht zufriedendstellend und erlaubte nur die
   Verwendung von bis zu 4 Farben, so dass ich mich entschloss das interne
   Konzept komplett zu berarbeiten.

   Ich betrachte den Dumper nicht als professionelles Produkt oder als
   Konkurrenz zu anderen professionellen Druckertreibern. Er ist mehr als
   Hilfe fr all diejenigen Gefrusteten RISC OS Nutzer gedacht, die solze
   Besitzer eines Druckers sind, der von RISC OS nicht unetrsttzt wird und
   fr den keine professionellen Treiber verfgbar sind bzw. keine
   zufriedenstellenden Ergebnisse liefern. Ich sehe den Dumper mehr als ein
   Beispiel dafr an, wie man man unter RISC OS Druckertreiber schreiben
   kann.

                                  5. Copyright

   Copyright 2002-2004 liegt bei Thomas Milius Stade, Deutschland

   Der Quellcode des Dumpers ist mit leichten Einschrnkungen Open Source.
   Diese Einschrnkungen dienen dazu kommerziellen Gebrauch des Dumeprs ohne
   meine Einwilligung zu unterbinden. Ich selbst behalte mir vor den Code
   jederzeit in anderen Programmen zu verwenden ohne den Code dieser
   Programme ffentlich zugnglich zu machen. Diese Progamme knnen
   kommerziellen Character haben. Andere Programmierer knnen den Code
   jederzeit in ihren Programmen verwenden, solange kein Profit daraus
   gezogen wird, und der Code zu den gleichen Bedingungen verffentlicht
   wird, wie dieses Programm. Im Falle dass daraus Profit gezogen werden
   soll, ist vorher meine Erlaubnis einzuholen.

                                   6. Kontakt

   Wenn Sie Fragen, verbesserungsvorschlge oder Anmerkungen haben, knnen
   Sie mich unter folgendenr Adresse erreichen:

   Thomas Milius
   Tilsiter Strasse 2
   21680 Stade
   Deutschland

   Telefon:
   04141/65005
   Werktags von 19:00 bis 21:30, sowie an Wochenenden

   E-mail:
   Thomas-Milius@t-online.de

   Homepage:
   http://www.thomas-milius.homepage.t-online.de/

   Ein Experte auf dem Gebiet des Tintenstrahldrucks, der Ihnen evt. bei der
   Kalibrierung oder dem Schreiben eines eigenen PDFs weiterhelfen kann, ist:

   Martin Hodgson

   E-mail:
   marthodgson@freeuk.com

            7. Ntzliche Verweise, um ein eigenes PDF zu erstellen

   Die Dokumentation fr den EPSON C40, der die gleichen Steuersequenzen wie
   der EPSON Stylus Color 580 zu benutzen scheint, steht unter:

   http://www.epsondevelopers.com/

   Man muss sich registrieren, aber dies ist kostenlos (Stand Mrz 2002).
   Auf der Webseite finden sich um,fassende Informationen zu EPSON
   Steuersequenzen und EPSON Scanner.

   Auf "users with commercial interests" beschrnkt ist die Canon Entwickler
   Homepage. Die angegebenen Daten und Interessen werden manuell berprft:

   http://www.developers.canon-europa.com/

   Als weitere gute Quelle kommt das GIMP-Projekt in Frage, das auf RISC OS
   von Martin Wuerthner portioert wurde:

   http://www.gimp.org/

   Auf alle Flle braucht man die RISC OS Programmers Reference Manuals zum
   Verstndnis des RISC OS Drucksystems. Hierzu zhlen auch die Dokumente
   die sich auf Erweiterungen des Drucksystems beziehen.

                                  8. Historie

8.1. Version 1.00

   Verffentlich:
     * 31.12.2002

   Preis:
     * Keiner, denn es ist Open Source und Freeware

   Bemerkung:
     * Erste ffentliche Version

   Korrigierte Fehler:
     * Keine

   Neue Fehler/Probleme:
     * mangelnde Farbtreue (aber was will man machen wenn Zyan nahezu Blau
       ist und Magenta ebenfalls deutliche Blauanteile enthlt).
     * Etwas langsam
     * kleiner aber fataler Fehler im Assembler/C-Adapter, der den
       Speicherinhalt zerstrt
     * Fehler in Dokumentation: Fhre Stack Operation aus. POP und PUSH
       vertauscht

   Neue Eigenschaften:
     * Monochromdruck
     * 8 Bit Graustufendruck
     * 32 Bit Farbdruck
     * Auflsung 360 * 360
     * Auflsung 360 * 120 (drftige Ergebnisse)

8.2. Version 1.01

   Verffentlicht:
     * 10.02.2003

   Preis:
     * Keiner, denn es ist Open Source und Freeware

   Bemerkungen:
     * Nicht offiziell verffentlicht, da ich dachte bis zur
       Verffentlichung von Version 2.00 wrden nur zwei Wochen vergehen.
       In Wirklichkeit verzgerte sich dies um Jahre, so wurde diese Version
       nur an einige frustrierte Nutzer direkt als Patch gesendet.

   Korrigierte Fehler:
     * Assembler/C-Adapter korrigiert

   Neue Fehler/Probleme:
     * Keine

   Neue Eigenschaften:
     * Keine

8.3. Version 2.07

   Verffentlicht:
     * 30.09.2004

   Preis:
     * Keiner, denn es ist Open Source und Freeware

   Bemerkungen:
     * Vllige berarbeitung des Ditherns und einiger anderer Teile
     * Die Dither Information, Kalibrierung und PDF Dateien sind nicht
       abwrtskompatibel mit Version 1.x.. Die PDF Dateien mssen
       allerdings nur geringfgig modifiziert werden.

   Korrigierte Fehler:
     * Diverse Fehler/Probleme

   Neue Fehler/Probleme:
     * Beim Ausdruck von 8 bit Graustufengrafiken aus !Paint oder !Photodesk
       im Graustufenmodus werden diese verschoben.
     * Druck wird unter bestimmten nicht nher bekannten Umstnden falsch
       plaziert.

   Neue Eigenschaften:
     * Dumper hat nun registrierte Modulnummer
     * Farbkalibrierungsprogramm
     * Installation ber Programm
     * 8 Bit Farbdruck
     * 16 Bit Farbdruck
     * Direkte Ausgabe in Spritedatei
     * Geditherte Ausgabe in Spritedatei
     * Modus zum Bestimmen der Seitengrsse
     * verbesserte(s) Dithering/Farbapproximation
     * Untersttzt bis zu 10 Farbpatronen. (wird druch RISC OS begrenzt
       intern knnen bis zu 32 Farbpatronen verwaltet werden)
     * Untersttzt beliebige Papiergrssen
     * Untersttzt bis zu 255 Druckkopfdsen
     * Untersttzt beliebige Auflsungen in horizontaler und vertikaler
       Richtung.
     * Untersttzt bis zu 32 Bits Druckinformation pro Pixel.
     * Untersttzt bis zu 3 vertikale Druckberlagerungen
     * Untersttzt eine beliebige Zahl von Farbkartuschenstufen auf dem
       Druckkopf.
     * Beschleunigung von Schwarz/Weiss-Druck auch bei Farbdruck
     * Spezieller Graustufendruck auch bei Farbdruck
     * Gebrauch von Dynamic Areas fr die Druckpuffer.
     * RLL Kompression der Grafikausgabe
     * Verschiedene Kalibrierungen je nach Papierart.

                                   9. Zukunft

   Folgendes msste bei Bedarf noch ergnzt werden:

     * Sprachabhngige Fehlerausgabe
     * Fllen einiger Variablen
     * Horiziontales Interlacing
     * 8 Bit Farbseparationsmodus

                             10. Technische Details

   Folgende Hinweise bzgl. der PDF-Dateien und der Rechner, auf denen der
   Driver eingesetzt werden kann, sind zu beachten.

   Der Dumper wurde auf meinem RiscPC (!Printers 1.64, RISC OS 4.02), meiner
   RiscStation (!Printers 1.64, RISC OS 4.03) und meinem IYONIX (!Printers
   1.67, RISC OS 5.06) getestet.

   Der Dumpername und die Dumpernummer sind registriert. Die
   Dumpermodulnummer ist 22 (&16).

   Die zahl der vertiaklen Interlaces ist unabhgig von der Dumperhhe. Die
   Dumpertiefe muss immer die Zahl der Dsen auf dem Druckkopf angeben. Die
   Dumperhhe ist immer ein Vielfaches der Dumpertiefe und legt die Zahl der
   Stufen auf dem Druckkopf fest, d.h. die Art der Anordnung der Farben auf
   dem Druckkopf. Z.B. hat der 580 die Farbpatronen Zyan, Gelb, Magenta und
   Schwarz. Zyan wird ganz oben gedruckt. Darunter sind Gelb und Schwarz auf
   dem Druckkopf angeordnet. Die letzte Farbe auf dem Druckkopf ist Magenta.
   Man hat also 3 Stufen. Die Dumpertiefe ist 15. Die Dumperhhe ist also
   3*15=45. Zyan erhlt die Position 0 auf dem Druckkopf (Siehe ZERO_SKIP
   unten), Gelb und Schwarz bekommen die Position 1 und Magenta die Position
   2.

   Es gibt keine Festlegung der Farben auf bestimmte unten erwhnte
   LINE_START oder LINE_PASS Sequenzen. Jeder Druckerpunkt wird durch eine
   bestimmte Anzahl Bits dargestellt. Eine Kalibrierung enthlt die
   Bitmasken, die ntig sind, um bestimmte Farben zu drucken. Diese
   Bitmasken bestehen aus Gruppen von 1,2 oder mehr Bits fr jede
   Farbpatrone. Jede Farbpatrone stellt eine Grundfabre dar, die in
   unterschiedlichen Intensitten gedruckt werden kann. Die Anzhal der
   Intensitten ergibt sich aus der Zahl der Bits pro Punkt. Wenn wenigsten
   ein Bit innerhalb der ersten Farbgruppe gesetzt ist, dann wird die
   LINE_START_1 Sequenz gesendet (Bei 2 Bit Bits 0-1 innerhalb der Bitmaske).
   Wenn wenigsten ein Bit innerhalb der zweiten Farbgruppe gesetzt ist, dann
   wird die LINE_PASS_1 Sequenz gesendet (Bei 2 Bit Bits 2-3 innerhalb der
   Bitmaske) usw.. Die Zuordnung Farbe/Farbpatrone zu Steuersequenzen wird
   ber die den Farben zugeordneten Bitmaps gesteuert. Um die Handhabung zu
   vereinfachen, zeigt das Kalibrierungsprogramm zu jeder gewhlten
   Farbpatrone eine Abkrzung der zugehrigen Steuersequenz. Dabei bekommt
   LINE_START_1 typischerweise die Steuersequenz fr Schwarz und LINE_PASS_1
   die Steuersequenz fr Zyan. Dies gilt allerdings nicht, wenn der Drucker
   keine Schwarzpatrone besitzt. In einem solchen Fall erhlt LINE_START_1
   Zyan und LINE_PASS_1 Gelb. Das ist alles etwas kompliziert aber das
   Konzept ist hoch flexibel.

   Die Zahl der Farbpatronen ergibt sich aus der hchsten genutzten
   LINE_PASS/LINE_START Steuersequenz in dem entsprechenden Modus.

   In der PDF_Datei werden nur die folgenden Eintrge genutzt:

     * SET_LINES enthlt den ersten Teil der Seitenanfangsteuersequenz weil
       diverse Versionen von !Printedit nur 256 Zeichen in der Anzeige
       zulassen. Das fhrt dazu, dass die Steuersequenz nur einen Bruchteil
       der mglichen Zeichenanzahl enthalten kann.
     * PAGE_START enthlt den zweiten Teil der Seitenanfangsteuersequenz.
       Beide Teile werden intern zusammengemischt.
     * PAGE_END enthlt die Seitenendesteuersequenz.
     * LINE_RETURN kann ein RISC OS Kommando aufnehmen, das vom Dumper
       ausgefhrt wird, nachdem der Druck beendet wurde. Dies kann man fr
       diverse Zwecke, wie Umbennen von Ausgabedateien usw. nutzen. Die
       Sequenz wird in allen Modi ausgefhrt, so kann sie bei Spriteausgabe
       ebenso wie fr normale Ausdrucke genutzt werden. Ausserdem darf die
       Sequenz Kellerstackrechnersequenzen enthalten!
     * ZERO_SKIP enthlt Informationen ber den Drucker.

       +--------------------------------------------------------------------+
       | Byte |                          Bedeutung                          |
       |------+-------------------------------------------------------------|
       | 1    | Anzahl Bits im Drucker zur Farbintensittsdarstellung       |
       |------+-------------------------------------------------------------|
       |      | Druckermodus:                                               |
       |      |                                                             |
       |      | +---------------------------------------------------------+ |
       |      | | Modusnummer |               Beschreibung                | |
       |      | |-------------+-------------------------------------------| |
       |      | |             | blicher Modus, um Drucksequenzen mit     | |
       |      | | 0           | Steuersequenzen und geditherten           | |
       |      | |             | Punktdaten zu erzeugen, mit denen ein     | |
       |      | |             | Dokument gedruckt wird.                   | |
       |      | |-------------+-------------------------------------------| |
       |      | |             | Erzeugt nur die Steuersequenzen aber      | |
       |      | | 1           | keine Punktdaten. Wird zur PDF            | |
       |      | |             | Entwicklung und zur Bestimmung der        | |
       |      | |             | Seitengrsse benutzt.                     | |
       |      | |-------------+-------------------------------------------| |
       |      | |             | Erzeugt eine 32 bit Spritedatei. Die      | |
       |      | |             | Punktdaten werden unverdert aus dem      | |
       |      | |             | Drucksystem bernommen. Jede Seite wird   | |
       |      | | 2           | als eigenstndiges Sprite in der Datei    | |
       |      | |             | abgelegt. Funktioniert nur, wenn eine     | |
       | 2    | |             | Datei als Druckerausgabeziel angegeben    | |
       |      | |             | wird.                                     | |
       |      | |-------------+-------------------------------------------| |
       |      | |             | Erzeugt eine 32 bit Spritedatei. Die      | |
       |      | |             | Punktdaten werden mit den Druckerfarben   | |
       |      | |             | gedithert. Jede Seite wird als            | |
       |      | | 3           | eigenstndiges Sprite in der Datei        | |
       |      | |             | abgelegt. Funktioniert nur, wenn eine     | |
       |      | |             | Datei als Druckerausgabeziel angegeben    | |
       |      | |             | wird. Wurde stark whrend der             | |
       |      | |             | Entwicklung des Dumpers eingesetzt.       | |
       |      | |-------------+-------------------------------------------| |
       |      | |             | Erzeugt eine Spritedatei mit Farbpalette. | |
       |      | |             | Die Punktdaten werden mit den             | |
       |      | |             | Druckerfarben gedithert. Jede Seite wird  | |
       |      | |             | als eigenstndiges Sprite in der Datei    | |
       |      | | 4           | abgelegt. Funktioniert nur, wenn eine     | |
       |      | |             | Datei als Druckerausgabeziel angegeben    | |
       |      | |             | wird. Die Zahl der Druckerfarben und      | |
       |      | |             | aller Kombinationen darf 256 nicht        | |
       |      | |             | berschreiten.                            | |
       |      | +---------------------------------------------------------+ |
       |------+-------------------------------------------------------------|
       |      | Position der zu Farbe 1 gehrenden Patrone auf dem          |
       |      | Druckkopf. Die am weitesten oben angeordnete Patrone        |
       |      | bekommt die Position 0. Alle anderen Patronen bekommen      |
       | 3    | entsprechend ihrer Position die Nummern 1, 2 usw.. Bitte    |
       |      | beachten Sie, dass mehrere Partronen die gleiche Position   |
       |      | haben knnen. sofern sie in gleicher Hhe auf dem           |
       |      | Druckkopf angeordnet sind. Es muss ein (Dummy)wert          |
       |      | eingetragen werden, auch wenn die Farbe nicht genutzt wird. |
       |------+-------------------------------------------------------------|
       | 4    | Position der zu Farbe 2 gehrenden Patrone auf dem          |
       |      | Druckkopf.                                                  |
       |------+-------------------------------------------------------------|
       | 5    | Position der zu Farbe 3 gehrenden Patrone auf dem          |
       |      | Druckkopf.                                                  |
       |------+-------------------------------------------------------------|
       | 6    | Position der zu Farbe 4 gehrenden Patrone auf dem          |
       |      | Druckkopf.                                                  |
       |------+-------------------------------------------------------------|
       | 7    | Position der zu Farbe 5 gehrenden Patrone auf dem          |
       |      | Druckkopf.                                                  |
       |------+-------------------------------------------------------------|
       | 8    | Position der zu Farbe 6 gehrenden Patrone auf dem          |
       |      | Druckkopf.                                                  |
       |------+-------------------------------------------------------------|
       | 9    | Position der zu Farbe 7 gehrenden Patrone auf dem          |
       |      | Druckkopf.                                                  |
       |------+-------------------------------------------------------------|
       | 10   | Position der zu Farbe 8 gehrenden Patrone auf dem          |
       |      | Druckkopf.                                                  |
       |------+-------------------------------------------------------------|
       | 11   | Position der zu Farbe 9 gehrenden Patrone auf dem          |
       |      | Druckkopf.                                                  |
       |------+-------------------------------------------------------------|
       | 12   | Position der zu Farbe 10 gehrenden Patrone auf dem         |
       |      | Druckkopf.                                                  |
       |------+-------------------------------------------------------------|
       |      | Datenkompressionmodus:                                      |
       |      |                                                             |
       |      | +---------------------------------------------------------+ |
       |      | | Modusnummer |               Beschreibung                | |
       |      | |-------------+-------------------------------------------| |
       | 13   | | 0           | Keine Kompression. Die Datengrsse        | |
       |      | |             | entspricht der bertragenen Menge Bytes.  | |
       |      | |-------------+-------------------------------------------| |
       |      | |             | Run length encoded (RLL) Kompression. Die | |
       |      | | 1           | Datengrsse entspricht der                | |
       |      | |             | unkomprimierten Menge an Bytes.           | |
       |      | +---------------------------------------------------------+ |
       |------+-------------------------------------------------------------|
       |      | Nummer der Kalibrierung, die beim Ausdruck in diesem Modus  |
       | 14   | als Ausgangswert verwendet wird. Sie kann pro Seite         |
       |      | gendert werden, um verschiedene Papiertypen in einem Job   |
       |      | bedrucken zu knnen.                                        |
       +--------------------------------------------------------------------+

     * LINE_START_1 enthlt die Steuersequenz, um die Grafikdaten fr die
       erste Patrone bertragen zu knnen.
     * LINE_START_2 enthlt die Steuersequenz, um die Grafikdaten fr die
       sechste Patrone bertragen zu knnen.
     * LINE_PASS_1 enthlt die Steuersequenz, um die Grafikdaten fr die
       zweite Patrone bertragen zu knnen.
     * LINE_PASS_1b enthlt die Steuersequenz, um die Grafikdaten fr die
       siebente Patrone bertragen zu knnen.
     * LINE_PASS_2 enthlt die Steuersequenz, um die Grafikdaten fr die
       dritte Patrone bertragen zu knnen.
     * LINE_PASS_2b enthlt die Steuersequenz, um die Grafikdaten fr die
       achte Patrone bertragen zu knnen.
     * LINE_PASS_3 enthlt die Steuersequenz, um die Grafikdaten fr die
       vierte Patrone bertragen zu knnen.
     * LINE_PASS_3b enthlt die Steuersequenz, um die Grafikdaten fr die
       neunte Patrone bertragen zu knnen.
     * LINE_PASS_4 enthlt die Steuersequenz, um die Grafikdaten fr die
       fnfte Patrone bertragen zu knnen.
     * LINE_PASS_4b enthlt die Steuersequenz, um die Grafikdaten fr die
       fnfte Patrone bertragen zu knnen.
     * LINE_END_1 enthlt die Steuersequenz, um den Druckkopf am Ende der
       Zeile nach dem ersten Vertikaldurchlauf positionieren zu knnen.
     * LINE_END_2 enthlt die Steuersequenz, um den Druckkopf am Ende der
       Zeile nach dem zweiten Vertikaldurchlauf positionieren zu knnen.
     * LINE_END_3 enthlt die Steuersequenz, um den Druckkopf am Ende der
       Zeile nach dem dritten Vertikaldurchlauf positionieren zu knnen.

   Alle anderen Steursequnzen sind ungenutzt. Bitte beachten sie, dass der
   Dumper innerhalb der Steuersequenzen eine etwas sonderbare Eigenschaft
   aufweist, einen sog. Kellerstackrechner.

10.1. Der Kellerstackrechner in Druckersteuersequenzen

   Beim Kellerstackrechner in den Druckersteuersequenzen handelt es sich um
   einen Rechner, der nach dem Prinzip der umgekehrten polnischen Notation
   arbeitet und dessen Befehle durch Bytes innerhalb der Steuersequenzen
   abgebildet werden. Kurz bevor eine Steuersequenz an den Drucker geschickt
   wird, wird der kleine Rechner aufgerufen. Whrend der Auswertung der
   Stuersequenz werden alle Bytes, die zu einer Rechnersteuersequenz
   gehren, entfernt. Der Rechner kann aber auch neue Sequenzen erzeugen,
   die in die Druckersteuersequenz eingebettet und anschliessend zum Drucker
   gesendet werden.

   Zweck des Rechners ist es Zeichenketten dynamisch gemss intern
   Zustnden des Dumpers zu erzeugen bzw. einige Zustnde des Dumpers zu
   setzen. So ist z.B. die Datengrsse nicht lnger an eine bestimmte
   Stelle vor oder hinter der Hauptdruckersteuersequenz gebunden, und es ist
   nicht mehr notwendig einen neuen Dumper zu schreiben, bloss weil
   Hersteller A Little Endian Kodierung fr die Grsse verwendet,
   Hersteller B aber Big Endian Kodierung.

   Der Rechner wird durch ein Byte mit dem Wert 0xFF innerhalb einer
   Steuersequenz aktiviert. Dieses Byte gehrt zur Rechnersequenz und wird
   deshalb aus der Druckersteuersequenz entfernt. Ein Byte mit dem Wert von
   0xFF beendet ebenfalls eine Druckersteuersequenz (Die Berechnung selbst
   kann durch eine andere Sequenz vorzeitig bedingt beendet werden). Weil die
   Sequenz 0xFF 0xFF keinen Sinn ergibt (Rechner an, Rechner aus), wird sie
   dazu verwendet den Wert 0xFF innerhalb der Druckersteuersequenz
   darzustellen.

   Bitte beachten Sie, dass eine Druckersteuersequenz mehrere voneinander
   unabhngige Rechnersequenzen erhalten kann.

   Der Kellerstackrechner selbst besteht aus 4 Stackregistern, einer
   Bedingungsflagge, um bedingte Befehlsausfhrung zu erlauben, und einer
   Reihe von Variablen. Der Inhalt dieser Variablen wird entweder durch den
   Dumper selbst gesetzt oder ergibt sich aus den Operationen, die mit dem
   Rechner durchgefhrt werden. Beim Start einer Rechnersequenz wird die
   Bedingungsflagge auf FALSE gesetzt, der Zustand der Stackregister hingegen
   ist unbestimmt. Der Zustand der Variablen, die nicht vom Dumper selbst
   verwaltet werden, ist beim Start eines Druckauftrags ebenfalls umbestimmt.

   Jede Operation belegt ein 1 Byte. Die Bits sind von 0 bis 7
   durchnummeriert. Bit 7 legt fest, ob eine Operation immer ausgefhrt wird
   (=1) oder nur dann, wenn die Bedingungsflagge den Wert TRUE besitzt (=0).

   Man kann die Ausfhrung der Kellerstacksequnzen kontrollieren, wenn man
   folgenden Befehl eingibt:

 TraceCellarStack on

   Im Folgenden wird ein Traceprotokoll der Sequenzen in die Ausgabedatei
   geschrieben, die dann allerdings nicht ausgedruckt werden kann. Man die
   Protokolleirung wieder abschalten, indem man dne folgenden Befehl eingibt:

 TraceCellarStack off

   Den aktuellen Tracezustand kann man sich mit folgendem Befehl anzeigen
   lassen:

 TraceCellarStack

  10.1.1. Kommandos

 C000XXXX - Lade Nibble.
            XXXX enthlt den Nibblewert, der auf den Stack geladen
            wird (Register A). Der Stack wird vorher gepusht.

 C001XXXX - Setze Bedingungsflagge.
            XXXX enthlt den durchzufhrenden Vergleich:
            0000 - A = 0
            0001 - A != 0
            0010 - A < 0
            0011 - A > 0
            0100 - A <= 0
            0101 - A >= 0
            0110 - Setze Bedingungsflagge auf FALSE
            0111 - Setze Bedingungsflagge auf TRUE
            1000 - A = B pop registers
            1001 - A != B pop registers
            1010 - A < B pop registers
            1011 - A > B pop registers
            1100 - A <= B pop registers
            1101 - A >= B pop registers
            1110 - Invertiere Bedingungsflagge
            1111 - reserviert

 C010XXXX - Fhre Stackoperation durch.
            XXXX enthlt die durchzufhrende Operation:
            0000 - B + A
            0001 - B - A
            0010 - B * A
            0011 - B / A
            0100 - B MOD A
            0101 - B HOCH A
            0110 - B um A nach rechts verschieben
            0111 - B um A nach links verschieben
            1000 - INVERTIERE A
            1001 - B ODER A
            1010 - B UND A
            1011 - B EXOR A
            1100 - POP Stack (A geht verloren)
            1101 - PUSH Stack (A wird dupliziert)
            1110 - vertausche A B
            1111 - (B << 4) ODER (A UND 0x0000000F). Um beliebige Werte ber Nibbles zu laden

            Die Operanden werden im Regelfall vom Stack entfernt, d.h. der Stack wird
            entsprechend gepoppt und das Resultat wird danach auf den Stack gepusht.

 C0110XXX - Schreibe den Inhalt von Register A in die Druckersteuersequenz.
            Der Stack wird danach gepoppt.
            XXX enthlt das Ausgabeformat:
            000 - Als lesbare Dezimalzahlen (0-9)
            001 - 1 Byte binrer Zahlenwert
            100 - Als lesbare kleingeschriebene Hexadezimalzahlen (0-9, a-f)
            101 - Als lesbare grossgeschriebene Hexadezimalzahlen (0-9, A-F)

            und

             10 - 2 Bytes binrer Zahlenwert
             11 - 4 Bytes binrer Zahlenwert

            mit

            0   - Little Endian
            1   - Big Endian

 C01110XX - Vergleiche Seitengrsse (Breite/Hhe in Variablen
            0x00000018 and 0x00000019) mit den Seitengrssensequenzen
            innerhalb der Seitengrssensequenzkonfigurationstabelle.
            Wird ein entsprechender Eintrag gefunden, so wird die
            Bedingungsflagge auf TRUE gesetzt und die durch
            XX (0-3) festgelegte Sequenz wird entsprechend ihres
            Typs (siehe unten) entweder in die Druckersteuersequenz
            geschrieben oder ihre Werte werden auf den Stack gepusht.
            wird kene bereinstimmung gefunden, so wird die Bedingungsflagge
            auf FALSE gesetzt.

            Seitengrssensequenzen werden in der Konfigurationsdatei
            auf folgende Art und Weise eingebunden:
            "page_sequence_start" markiert den Anfang
            der Sequenzliste. "page_sequence_end" markiert
            das Ende der Sequenzliste. Dazwischen steht eine
            beliebige Anzahl von Seitengrssensequenzen im folgenden
            Format:

            dezimale_Seitenbreite dezimale_Seitenhhe [Sequenz_0 [Sequenz_1 [Sequenz_2 [Sequenz_3]]]]

            Eine Sequenz besteht aus einer Typkennung gefolgt von einem Doppelpunkt:

            - V: bedeutet, dass eine durch Komma getrennte Liste von dezimalen Werten folgt,
                 die auf den Stack gepusht werden.
            - S: bedeutet, dass eine Steuersequenz folgt, die in die Druckersteuersequenz
                 eingefgt wird. Die Sequenz wird in der blichen Form fr Steuersequenzen
                 angegeben, die auch von Print Edit verwendet wird (Eine Mixture aus in
                 Anfhrungszeichen eingeschlossenen Buchstbaben und Dezimalzahlen, die
                 durch Kommas getrennt sind. Kellerstacksequnezen sind hier nicht erlaubt,
                 so dass 255 wirklich das Zeichen 255 beschreibt). Wichtig: Eine Sequenz
                 darf kein Leerzeichen enthalten, da dies den Anfang der nchsten Sequenz
                 anzeigt.

            Eine Sequenz kann optional festgelegt werden und S: bzw. V: Sequenzen
            knnen beliebig gemischt werden. Beispiel:

            12345 456789 S:27,"(","C",4,0,"q",16,0,0 V:123,456

            Sequenz 0 fr Seitengrsse 12345/456789 ist 27,"(","C",4,0,"q",16,0,0 und
            wird in die Druckersteuersequenz eingefgt.

            Sequenz 1 liefert die Werte 123 und 456, die auf den Stack gepusht werden.
            123 wird zuerst gepusht, dann folgt 456. danach enthlt Register B 123
            und Resgister A 456.

            Sequenz 2 und Sequenz 3 sind nicht definiert.

            Mit solchen Sequenzen kann man Folgendes machen:

            a. Man kann dem Drucker die Papiergrsse mitteilen (A4, Letter)
            b. Man kann am Drucker die Papierquelle auswhlen
            c. Man kann dem Drucker den Papiertyp mitteilen (Photo/normal)

            Anmerkung: Benutzen Sie einen Trick, um besondere Papiertypen
            zu verwalten. RISC OS untersttzt es nicht, die Art des Papiers
            anzugeben, man kann aber eine geringfgig kleinere Breite oder
            Hhe als die normale Papiergrsse angeben. Dies beeinflusst den
            Druckprozess nicht negativ.

 C0111110 - Speichere Stackinhalt B in die durch A bestimmte Variable.
            Der Stack wird danach gepoppt (A geht verloren).

 C0111111 - Lade den Stack mit dem Wert der durch A bestimmten Variable.
            A wird durch den Inhalt der Variable ersetzt.

 C100XXXX - Lade den Stack mit dem Wert einer Druckauftragzustandsvariablen.
            Der Stack wird vorher gepusht.
            XXXX enthlt die Druckauftragzustandsvariablen.

 C10100XX - Schreibt den Namen der Ausgabedatei in die Druckersteuersequenz.
            Der Stack bleibt unverndert.

            XX enthlt das Ausgabeformat:
            00 - reserviert
            01 - Dateiname
            10 - Pfad
            11 - Pfad und Dateiname

 01010100 - Schreibe eine Bytesequenz, die dem Kommando folgt,
            bedingt in die Druckersteuersequenz. Die Sequenz
            wird durch 11010100 begrenzt welches sonst keinen
            Sinn ergibt, da es die gleiche Bedeutung htte, als ob
            man die Sequenz ausserhalb einer Kellerstacksequenz
            direkt in die Druckerstersequenz schreiben wrde.
            Ein 11010100 Byte innerhalb der Sequenz kann durch zwei
            aufeinanderfolgende 11010100 dargestellt werden.
            Gemss der Bedingungsflagge wird die Sequenz geschrieben oder
            ignoriert. In beiden Fllen wird die Berechnung mit dem Kommando
            hinter dem terminierenden 11010100 fortgesetzt. 11111111
            kann in die Sequenz eingebettet werden. Es wird nicht als
            Kellerstacksequenzterminierungskennzeichen behandelt.

 11010100 - Beendet eine Zeichensequenz, die durch 01010100 eingeleitet
            wurde. 11010100 ohne 01010100 wird ignoriert.

 11111111 - Ende der Kellerstacksequenz. Der Kommandozeiger zeigt am Ende
            der Ausfhrung einer Kellerstackberechnung auf das folgende
            Zeichen in der Druckersteuersequenz. Dieses Kommando ist
            Pflicht. Wenn es nicht existiert, wird die gesamte Stackberechnung
            bis auf die nderung der Variablen ignoriert.

 01111111 - Bedingtes Ende der Kellerstacksequenz. Die Programmausfhrung
            hrt hier auf, aber die folgenden Zeichen werden bis zum
            nchsten 0xFF bersprungen.


   Alle anderen Werte sind reserviert.

  10.1.2. Variablen

   Im Bereich 0x00000000 bis 0x0000000F liegen Variablen die zur Laufzeit des
   Druckauftrags durch den Dumper gesetzt werden (Nur Lesezugriff).

 0x00000000 - Anzahl der verbleidenden Kopien
 0x00000001 - Aktuelle Stufe (aktualisiert vor jeder Datenausgabe)
 0x00000002 - Aktuelles vertikales Interlace (aktualisiert vor jeder Datenausgabe)
 0x00000003 - Aktuelles horizontales Interlace (aktualisiert vor jeder Datenausgabe)
 0x00000004 - Anzahl Bytes von Daten die im nchsten Block gesendt werden
              (aktualisiert vor jeder Datenausgabe)
 0x00000005 - Bytes die pro Zeile gefllt sind (aktualisiert vor jeder Datenausgabe)
              Ausgeschlossen sind leere Bereiche auf der rechten Seite.
              Achtung: Die Bytes sind nicht gleich Pixel.
 0x00000006 - Aktuelle Seite im Druckaufrag
 0x00000007 - Nummer des Druckjobs seit der Dumper gestart wurde.
              Verwendung zur eindeutigen Identifikation.
 0x00000008 - 0x0000000F reserviert

   Im Bereich 0x00000010 bis 0x0000004F liegen Variablen die vom Drucksystem
   festgelegt werden (Nur Lesezugriff).

 0x00000010 - Gesamtanzahl vertikaler Durchlufe
 0x00000011 - Gesamtanzahl horizontaler Durchlufe
 0x00000012 - Gesamtanzahl Farben (Noch nicht implementiert)
 0x00000013 - Gesamtanzahl Punkte pro Druckkopf
 0x00000014 - Anzahl vertikale Punkte pro Inch
 0x00000015 - Anzahl horizontale Punkte pro Inch
 0x00000016 - Vertikalversatz am Seitenanfang in Punkten
 0x00000017 - Horizontalversatz links am Zeilenanfang in Punkten
 0x00000018 - Seitenbreite in Inch/10000
 0x00000019 - Seitenhhe in Inch/10000
 0x0000001A - Seitendruckbereich oben links Vertikalposition in Inch/10000
 0x0000001B - Seitendruckbereich oben links Horizontalposition in Inch/10000
 0x0000001C - Seitendruckbereich unten rechts Vertikalposition in inch/10000
 0x0000001D - Seitendruckbereich unten rechts Horizontalposition in inch/10000
 0x0000001E - 0x0000004F reserviert

   Im Bereich 0x00000050 bis 0x0000007F liegen Variablen, die das Verhalten
   des Dumpers steuern (Schreib-/Leserechte hngen von der Variable ab):

 0x00000050 - Gesamtanzahl Stufen (nur lesen)
 0x00000051 - Datenkompressionsformat (lesen/schreiben)
 0x00000052 - Vertikalversatz in Punkten, der nicht ber Steuersequenzen
              abgedeckt wird (lesen/schreiben).
              Wird bei jedem Seitenstart automatisch aktualisert. Sinnvoll kann man
              der Wert nur in der Seitenstartsequenz abgendern.
 0x00000053 - Verbleibende Anzahl der Kopien der Seite (lesen/schreiben)
              Wird bei jedem Seitenstart automatisch aktualisert.
 0x00000054 - Anzahl der Farbpartonen (nur lesen)
 0x00000055 - Bits pro Druckerpixel (nur lesen)
 0x00000056 - Druckermodus (nur lesen)
 0x00000057 - Kalibrierung (lesen/schreiben)
              Wird mit Byte 14 aus ZERO_SKIP initialisiert.
              Kann in Abhngigkeit vom Papiertyp fr jede Seite
              gendert werden.
 0x00000058 - 0x0000007F reserviert

   Im Bereich 0x00000080 bis 0x000000FF liegen Variablen, die von Programmen
   beliebig genutzt werden knnen. Sie werden zu Beginn des Druckauftrags
   nicht initialisiert, bleiben aber bis zum Ende des Druckauftrags erhalten
   (Schreib-/Lesezugriff):

 0x00000080 - 0x0000008F frei nutzbare Variablen
 0x00000090 - 0x000000FF reserviert

  10.1.3. Programmbeispiel

   Um die Programmierung zu verdeutlichen, zeigt das folgende Beispiel, wie
   man einen Vertikalvorschubzhler implmentiert, um die Steuersequenzen zu
   optimieren.

   +------------------------------------------------------------------------+
   |Binr  |Dezimal|Reg A |Reg B |Reg C |Reg D|Bemerkung                    |
   |--------+-------+------+------+------+-----+----------------------------|
   |        |       |      |      |      |     |Initialisierungssequenz     |
   |--------+-------+------+------+------+-----+----------------------------|
   |11111111|255    |      |      |      |     |Start                       |
   |--------+-------+------+------+------+-----+----------------------------|
   |        |       |      |      |      |     |Lsche Vorschub             |
   |--------+-------+------+------+------+-----+----------------------------|
   |10000000|128    |0     |      |      |     |Lade Wert 0, um ihn in die  |
   |        |       |      |      |      |     |Variable zu speichern       |
   |--------+-------+------+------+------+-----+----------------------------|
   |10001000|136    |8     |0     |      |     |Variablennummer             |
   |        |       |      |      |      |     |hherwertiges Nibble (8)    |
   |--------+-------+------+------+------+-----+----------------------------|
   |10000000|128    |0     |8     |0     |     |Variablennummer             |
   |        |       |      |      |      |     |niederwertiges Nibble (0)   |
   |--------+-------+------+------+------+-----+----------------------------|
   |10101111|175    |0x80  |0     |      |     |Setze Variablennummer       |
   |        |       |      |      |      |     |zusammen (0x80)             |
   |--------+-------+------+------+------+-----+----------------------------|
   |10111110|190    |0     |      |      |     |Speichere Wert in die       |
   |        |       |      |      |      |     |Variable                    |
   |--------+-------+------+------+------+-----+----------------------------|
   |11111111|255    |      |      |      |     |Ende                        |
   |--------+-------+------+------+------+-----+----------------------------|
   |        |       |      |      |      |     |Sequenz am Zeilenende       |
   |--------+-------+------+------+------+-----+----------------------------|
   |11111111|255    |      |      |      |     |Start                       |
   |--------+-------+------+------+------+-----+----------------------------|
   |        |       |      |      |      |     |Addiere Vorschub            |
   |--------+-------+------+------+------+-----+----------------------------|
   |        |       |      |      |      |     |Lade alten Vorschubwert     |
   |--------+-------+------+------+------+-----+----------------------------|
   |10001000|136    |0x08  |      |      |     |Variablennummer             |
   |        |       |      |      |      |     |hherwertiges Nibble (8)    |
   |--------+-------+------+------+------+-----+----------------------------|
   |10000000|128    |0x00  |0x08  |      |     |Variablennummer             |
   |        |       |      |      |      |     |niederwertiges Nibble (0)   |
   |--------+-------+------+------+------+-----+----------------------------|
   |10101111|175    |0x80  |      |      |     |Setze Variablennummer       |
   |        |       |      |      |      |     |zusammen (0x80)             |
   |--------+-------+------+------+------+-----+----------------------------|
   |        |       |      |      |      |     |Dupliziere Variablennummer, |
   |10101101|173    |0x80  |0x80  |      |     |um Wert spter              |
   |        |       |      |      |      |     |zurckspeichern zu knnen.  |
   |--------+-------+------+------+------+-----+----------------------------|
   |10111111|191    |e.g. 0|0x80  |      |     |Lade Wert aus Variable      |
   |--------+-------+------+------+------+-----+----------------------------|
   |        |       |      |      |      |     |Vorschub hinter der Zeile   |
   |--------+-------+------+------+------+-----+----------------------------|
   |10000001|129    |0x01  |e.g. 0|0x80  |     |Vorschub hherwertiges      |
   |        |       |      |      |      |     |Nibble (1)                  |
   |--------+-------+------+------+------+-----+----------------------------|
   |10000001|129    |0x01  |0x01  |e.g. 0|0x80 |Vorschub niederwertiges     |
   |        |       |      |      |      |     |Nibble (1)                  |
   |--------+-------+------+------+------+-----+----------------------------|
   |10101111|175    |0x11  |e.g. 0|0x80  |     |Setze Vorschub zusammen     |
   |        |       |      |      |      |     |(0x11)                      |
   |--------+-------+------+------+------+-----+----------------------------|
   |        |       |      |      |      |     |Erhhe Vorschub             |
   |--------+-------+------+------+------+-----+----------------------------|
   |10100000|160    |e.g.  |0x80  |      |     |Addition des alten und neuen|
   |        |       |0x11  |      |      |     |Wertes am oberen Stackende  |
   |--------+-------+------+------+------+-----+----------------------------|
   |        |       |      |      |      |     |Speichere Vorschub          |
   |--------+-------+------+------+------+-----+----------------------------|
   |10101110|174    |0x80  |e.g.  |      |     |Vertausche Variablennummer  |
   |        |       |      |0x11  |      |     |und Vorschub auf dem Stack  |
   |--------+-------+------+------+------+-----+----------------------------|
   |10111110|190    |e.g.  |      |      |     |Speichere Wert in die       |
   |        |       |0x11  |      |      |     |Variable                    |
   |--------+-------+------+------+------+-----+----------------------------|
   |11111111|255    |      |      |      |     |End                         |
   |--------+-------+------+------+------+-----+----------------------------|
   |        |       |      |      |      |     |Datensequenz                |
   |--------+-------+------+------+------+-----+----------------------------|
   |        |       |      |      |      |     |Es wird unterstellt, dass   |
   |        |       |      |      |      |     |die Vorschubsequenz sich    |
   |        |       |      |      |      |     |schon in der Steuersequenz  |
   |        |       |      |      |      |     |befindet und man an dieser  |
   |        |       |      |      |      |     |Stelle nur den Wert         |
   |        |       |      |      |      |     |einsetzen muss.             |
   |--------+-------+------+------+------+-----+----------------------------|
   |11111111|255    |      |      |      |     |Start                       |
   |--------+-------+------+------+------+-----+----------------------------|
   |        |       |      |      |      |     |Baue Vorschubwert in die    |
   |        |       |      |      |      |     |Sequenz ein                 |
   |--------+-------+------+------+------+-----+----------------------------|
   |10001000|136    |8     |      |      |     |Variablennummer             |
   |        |       |      |      |      |     |hherwertiges Nibble (8)    |
   |--------+-------+------+------+------+-----+----------------------------|
   |10000000|128    |0     |8     |      |     |Variablennummer             |
   |        |       |      |      |      |     |niederwertiges Nibble (0)   |
   |--------+-------+------+------+------+-----+----------------------------|
   |10101111|175    |0x80  |      |      |     |Setze Variablennummer       |
   |        |       |      |      |      |     |zusammen (0x80)             |
   |--------+-------+------+------+------+-----+----------------------------|
   |        |       |      |      |      |     |Dupliziere Variablennummer, |
   |10101101|173    |0x80  |0x80  |      |     |um Wert spter              |
   |        |       |      |      |      |     |zurcksetzen zu knnen      |
   |--------+-------+------+------+------+-----+----------------------------|
   |10111111|191    |e.g.  |0x80  |      |     |Lade Vorschub aus Variable  |
   |        |       |0x11  |      |      |     |                            |
   |--------+-------+------+------+------+-----+----------------------------|
   |        |       |      |      |      |     |Fge Vorschub als 4 Byte    |
   |10110111|183    |0x80  |      |      |     |big endian Binrwert in die |
   |        |       |      |      |      |     |Steuersequenz ein           |
   |--------+-------+------+------+------+-----+----------------------------|
   |        |       |      |      |      |     |Lsche Vorschub             |
   |--------+-------+------+------+------+-----+----------------------------|
   |10000000|128    |0     |0x80  |      |     |Lade Wert 0, um ihn in die  |
   |        |       |      |      |      |     |variable zu speichern.      |
   |--------+-------+------+------+------+-----+----------------------------|
   |        |       |      |      |      |     |Speichere Vorschub          |
   |--------+-------+------+------+------+-----+----------------------------|
   |10101110|174    |0x80  |0     |      |     |Vertausche Variablennummer  |
   |        |       |      |      |      |     |und Vorschub auf dem Stack  |
   |--------+-------+------+------+------+-----+----------------------------|
   |10111110|190    |0     |      |      |     |Speichere Vorschub in       |
   |        |       |      |      |      |     |Variable                    |
   |--------+-------+------+------+------+-----+----------------------------|
   |11111111|255    |      |      |      |     |End                         |
   +------------------------------------------------------------------------+

10.2. Die druckerspezifische Kalibrierungsdatei

   Die Dateien sind genau wie der Drucker benannt und stehen im
   <Printers$Dir>.Resources.PDumpers.PDumperEI Verzeichnis Sie werden
   normalerweise ber das Konfigurationsprogram gendert, lassen sich aber
   auch von Hand abndern. Ein Satz vollstndig kalibrierter Musterdateien
   steht unter <PDPEICal$Dir>.Resources.Calibs. Die grundlegende Mutervorlage
   ist <PDPEICal$Dir>.Resources.CalibDef, die keine Farbdefinitonen enthlt.
   Das Kalibrierungsprogramm versucht als erstes die aktuellen Einstellungen
   fr den Drucker zu ermitteln. Findet es hier nichts, so sucht es im
   Calibs Verzeichnis nach Vorlagen.

   Die druckerspezifischen Kalibrierungsdateien bestehen zum Einen aus
   Kommentarzeilen, die mit einem "#" beginnen und zum Anderen aus
   druckerspezifischen Einstellungen. Die Zeilen drfen 511 Byte lang sein.
   Die Druckereinstellungen sind nach Gruppen gegliedert. Jede Gruppe wird
   durch ein entsprechende gruppenspezifische Startkennung (optional mit
   Parametern) eingeleitet. Darauf folgen die Zeilen mit den diversen
   Einstellungen. Ihr Format hngt von der Gruppe ab. Ende findet sich eine
   Zeile mit der Gruppenabschlusskennung. Leerzeilen sind nicht erlaubt.
   Kommentarzeilen knnen beliebig plaziert werden. Es gibt die folgenden
   Gruppen:

    1. Druckkopfjustage
    2. Seitenbehandlung
    3. Farbkalibrierung

+------------------------------------------------------------------------------+
|                              Einstellungsgruppe                              |
|------------------------------------------------------------------------------|
|             Startkennung             |           Abschlusskennung            |
|------------------------------------------------------------------------------|
|     Position     |                         Bedeutung                         |
|------------------------------------------------------------------------------|
|                               Druckkopfjustage                               |
|------------------------------------------------------------------------------|
| head_adjustment_start                | head_adjustment_end                   |
|------------------------------------------------------------------------------|
| 1                | "v" oder "h" fr vertikal bzw. horizontal                 |
|------------------+-----------------------------------------------------------|
| 2                | Patrone (0-9)                                             |
|------------------+-----------------------------------------------------------|
| 3                | Justierung in Pixel als ganze Zahl (horizontal sind nur   |
|                  | positive Werte erlaubt)                                   |
|------------------------------------------------------------------------------|
|                               Seitenbehandlung                               |
|------------------------------------------------------------------------------|
| page_sequence_start                  | page_sequence_end                     |
|------------------------------------------------------------------------------|
|                  | Papierbreite in Inch/10000 (dezimal)                      |
|                  |                                                           |
|                  | Wichtiger Hinweis: Infolge interner Rundungsdifferenzen   |
| 1                | knnen die Papiergrssen von DIN AX und DIN AX Generic    |
|                  | voneinander abweichen. Benutzen Sie den "Dummy for page   |
|                  | size" Druckermodus mit einer leeren Seite um die exakten  |
|                  | Werte zu bestimmen.                                       |
|------------------+-----------------------------------------------------------|
| 2                | Papierhhe in Inch/10000 (dezimal)                        |
|------------------+-----------------------------------------------------------|
|                  | Sequenz 0 (optional).                                     |
|                  |                                                           |
|                  | Eine Sequenz wird durch eine Typenkennung "S:" oder "V:"  |
|                  | eingeleitet. Hinter "S:" folgt eine Steuersequenz in der  |
|                  | Form, der sie auch in PrintEdit verwendet wird, aber ohne |
|                  | Kellerstack, so dass 255 auch wirklich das Zeichen 255    |
| 3                | beschreibt. Leerzeichen sind innerhalb der Sequenz nicht  |
|                  | erlaubt, als Ersatz ist 32 zu verwenden. Hinter "V:"      |
|                  | folgen bis zu 4 kommagetrennte ganze Zahlen.              |
|                  |                                                           |
|                  | Alle diese Sequenzen sind nur dann von Nutzen, wenn sie   |
|                  | entsprechend in den Kellerstacksequenzen referenziert     |
|                  | werden.                                                   |
|------------------+-----------------------------------------------------------|
| 4                | Sequenz 1 (optional nur wenn Sequenz 0 existiert).        |
|------------------+-----------------------------------------------------------|
| 5                | Sequenz 2 (optional nur wenn Sequenz 1 existiert).        |
|------------------+-----------------------------------------------------------|
| 6                | Sequenz 3 (optional nur wenn Sequenz 2 existiert).        |
|------------------------------------------------------------------------------|
|                               Farbkalibrierung                               |
|------------------------------------------------------------------------------|
| printable_colours_start              | printable_colours_end                 |
| [Reference_Number]                   |                                       |
|------------------------------------------------------------------------------|
| 1                | Rotkomponente der druckbaren Farbe (dezimal 0-255)        |
|------------------+-----------------------------------------------------------|
| 2                | Grnkomponente der druckbaren Farbe (dezimal 0-255)       |
|------------------+-----------------------------------------------------------|
| 3                | Blaukomponente der druckbaren Farbe (dezimal 0-255)       |
|------------------+-----------------------------------------------------------|
| 4                | Minimaler Rotwert, der von der Farbe abgedeckt wird       |
|                  | (dezimal 0-255)                                           |
|------------------+-----------------------------------------------------------|
| 5                | Maximaler Rotwert, der von der Farbe abgedeckt wird       |
|                  | (dezimal 0-255)                                           |
|------------------+-----------------------------------------------------------|
| 6                | Minimaler Grnwert, der von der Farbe abgedeckt wird      |
|                  | (dezimal 0-255)                                           |
|------------------+-----------------------------------------------------------|
| 7                | Maximaler Grnwert, der von der Farbe abgedeckt wird      |
|                  | (dezimal 0-255)                                           |
|------------------+-----------------------------------------------------------|
| 8                | Minimaler Blauwert, der von der Farbe abgedeckt wird      |
|                  | (dezimal 0-255)                                           |
|------------------+-----------------------------------------------------------|
| 9                | Maximaler Blauwert, der von der Farbe abgedeckt wird      |
|                  | (dezimal 0-255)                                           |
|------------------+-----------------------------------------------------------|
|                  | Druckermuster, um die Farbe zu erzeugen (hexadezimal bis  |
| 10               | zu 32 Bit). Hngt von den Bits pro pixel, der Zahl der    |
|                  | Patronen und dem vom Drucker bentigten Format fr die    |
|                  | Pixelintensitt ab.                                       |
|------------------+-----------------------------------------------------------|
|                  | Farbgruppeninformation (hexadezimal).                     |
|                  |                                                           |
|                  | +-------------------------------------------------------+ |
|                  | | Bit |                    Bedeutung                    | |
|                  | |-----+-------------------------------------------------| |
|                  | |     | Papierfarbe. Kein Mitglied in irgendeiner       | |
|                  | | 0   | anderen Gruppe. Wird zur Beschleunigung         | |
|                  | |     | bentigt und gebraucht, wenn keine andere       | |
|                  | |     | Farbe gefunden wird.                            | |
|                  | |-----+-------------------------------------------------| |
|                  | |     | Reines Schwarz. blicher- aber nicht            | |
|                  | | 1   | notwendigerweise Mitglied der Farbgruppe        | |
|                  | |     | Schwarz. Notwendig zur Schwarz/Weiss            | |
|                  | |     | Beschleunigung.                                 | |
|                  | |-----+-------------------------------------------------| |
|                  | | 2   | Farbgruppe Schwarz. Wird beim                   | |
|                  | |     | Graustufendithering verwendet.                  | |
|                  | |-----+-------------------------------------------------| |
|                  | |     | Farbgruppe Zyan. Logisches Mitglied der CMY und | |
|                  | | 3   | allgemeinen Farbgruppe. Notwendig, um           | |
| 11               | |     | Zyanfarben zu ermitteln.                        | |
|                  | |-----+-------------------------------------------------| |
|                  | |     | Farbgruppe Magenta. Logisches Mitglied der CMY  | |
|                  | | 4   | und allgemeinen Farbgruppe. Notwendig, um       | |
|                  | |     | Magentafarben zu ermitteln.                     | |
|                  | |-----+-------------------------------------------------| |
|                  | |     | Farbgruppe Gelb. Logisches Mitglied der CMY und | |
|                  | | 5   | allgemeinen Farbgruppe. Notwendig, um gelbe     | |
|                  | |     | Farben zu ermitteln.                            | |
|                  | |-----+-------------------------------------------------| |
|                  | |     | CMY Farbgruppe. Logisches Mitglied der          | |
|                  | | 6   | allgemeinen Farbgruppe. Wird intern z.Z. nicht  | |
|                  | |     | verwendet.                                      | |
|                  | |-----+-------------------------------------------------| |
|                  | |     | Hexachrom Farbgruppe. Logisches Mitglied der    | |
|                  | | 7   | allgemeinen Farbgruppe. Wird intern z.Z. nicht  | |
|                  | |     | verwendet.                                      | |
|                  | |-----+-------------------------------------------------| |
|                  | | 8   | Allgemeine Farbgruppe. Wird als                 | |
|                  | |     | Ditherinformation genutzt.                      | |
|                  | +-------------------------------------------------------+ |
|------------------+-----------------------------------------------------------|
|                  | Prozentanteil der Papierfarbe, der bentigt wird, um die  |
|                  | Farbe abzubilden. blicherweise 0. Maximal 99. Dieser     |
|                  | Wert wird benutzt, wenn bei Subraktionsfarben zu viel     |
|                  | Tinte aufs Papier gespritzt wird. Der Wert errechnet sich |
|                  | in dem man eine Linie zwischen dem Farbpunkt mit          |
|                  | Komponentenwerten kleiner 0 ausserhalb des RGB-Wrfels    |
| 12               | und dem Punkt der Papierfarbe legt. An der Stelle wo die  |
|                  | Linie durch eine Seite des RGB-Wrfels geht, liegt der    |
|                  | Punkt dessen Farbkomponenten in dieser Zeile gespeichert  |
|                  | werden. Dieser Wert errechnet sich aus der Lnge der      |
|                  | Linie zwischen dem gespeicherten Punkt und dem            |
|                  | Originalpunkt geteilt durch die Lnge der Linie zwischen  |
|                  | dem Originalpunkt und der Papierfarbe.                    |
+------------------------------------------------------------------------------+

  10.2.1. Der "Dummy for page size" Modus

   Die "Dummy for page size" Auflsung ist ein spezieller Druckermodus, der
   es Ihnen erlaubt die Breite und Hhe Ihrer selbstdefinierten
   Seitengrssen zu bestimmen.

    1. Whlen Sie die "Dummy for page size" Auflsung
    2. Whlen Sie eine beliebige Ausgabedatei fr Ihren Drucker
    3. ffnen Sie ein leeres Blatt Papier in einer beliebigen Applikation,
       aus der man drucken kann (z.B. !Writer)
    4. Drucken Sie das leere Blatt
    5. Schauen Sie in ihre Druckausgabedatei. Sie werden dort eine Zeile mit
       zwei Werten sehen.
    6. Kopieren Sie diese Werte in ihre druckerindividuelle
       Konfigurationsdatei im Bereich der Seitenbehandlung.
    7. Fgen Sie die entsprechenden "S:"-Seitensequenzen in der gerade
       erzeugten Zeile hinzu.
    8. Stellen Sie den Drucker auf die normale Ausgabe und Auflsung
       zurck.

10.3 Externe Kalibrierungsdateien

   Man Farbdefinitionen aus externen Dateien importieren. Diese Definitionen
   werden mit den Farben gemischt, die von !PDPEICal erzeugt wurden. Das
   Mischen findet nach dem Erzeugen der Farben aus den Basisfarben statt.
   Wenn keine Patronen gewhlt wurden, wird mindestens die Papierfarbe
   intern erzeugt. Dies ist die bliche Methode, um eine externe
   Kalibrierungsdatei einzubinden. Die zustzlichen Farben werden aus der
   kalibrierungsdatei eingelesen, die RGB-Komponenten, Papierfarbenanteil,
   Druckermuster und Farbgruppeninformation enthlt. Die zustzlichen
   Farben werden gegen die bereits von !PDPEICal erzeugten Farben auf
   Duplikate getestet. Liegt ein Duplikat vor, so haben die zustzlichen
   Farben die hhere Prioritt und ersetzen die bereits von !PDPEICal
   erzeugten Farben. Eine externe Kalibrierungsdatei darf auf keinen Fall
   eine Definition fr die Papierfarbe enthalten.

+------------------------------------------------------------------------------+
| Spalte |                               Inhalt                                |
|--------+---------------------------------------------------------------------|
| 1      | Rotkomponente der druckbaren Farbe (dezimal 0-255)                  |
|--------+---------------------------------------------------------------------|
| 2      | Grnkomponente der druckbaren Farbe (dezimal 0-255)                 |
|--------+---------------------------------------------------------------------|
| 3      | Blaukomponente der druckbaren Farbe (dezimal 0-255)                 |
|--------+---------------------------------------------------------------------|
|        | Druckermuster, um die Farbe zu erzeugen (hexadezimal bis 32 Bit).   |
| 4      | Hngt von den Bits pro pixel, der Zahl der Patronen und dem vom     |
|        | Drucker bentigten Format fr die Pixelintensitt ab.               |
|--------+---------------------------------------------------------------------|
| 5      | Farbgruppeninformation (hexadezimal)                                |
|--------+---------------------------------------------------------------------|
| 6      | Prozentanteil der Papierfarbe, der bentigt wird, um die Farbe      |
|        | abzubilden.                                                         |
+------------------------------------------------------------------------------+

10.4. Die Ditherinfo Datei

   Die Ditherinfo Datei liegt unter
   <Printers$Dir>.Resources.PDumpers.PDumperEI. Sie enthlt den
   Horizontalversatz fr jede Zeile whrend des Ditheringprozesses.

   +------------------------------------------------------------------------+
   | Spalte |                            Inhalt                             |
   |--------+---------------------------------------------------------------|
   | 1      | Konstanter Wert "ho", steht fr horizontal offset             |
   |--------+---------------------------------------------------------------|
   | 2      | Zeilennummer bei der der Versatz genutzt werden soll          |
   |--------+---------------------------------------------------------------|
   | 3      | Auftrittshufigkeit bei der der Versatz genutzt werden soll.  |
   |--------+---------------------------------------------------------------|
   | 4      | Versatz in Punkten                                            |
   +------------------------------------------------------------------------+

   In <PDPEICal$Dir>.Resources gibt es ein kleines BASIC Programm namens
   GenDither, mit dem man sich eine andere Ditherinfo Datei erzeugen lassen
   kann, wenn einem die aktuelle Datei nicht zusagt.
